#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define piii pair<int,pair<int,int> >
#define F first
#define S second
#define x1 x<<1
#define x2 x<<1|1
#define mid ((l+r)>>1) 
#define lowbit(x) x&(-x)
const int N=5e5+5,M=1e6;
int n,tmp=0,INF=1e6+5;
map<pii,pii> mp;
pii Q[N],len[N];
vector <pii> t[N<<2];
pii ma[(M+5)<<2],mi[(M+5)<<2];
piii dma[N*19],dmi[N*19];
int tma=0,tmi=0;
int tl[M+5],tr[M+5];
pii dtl[N*19],dtr[N*19];
int ttl=0,ttr=0;
pii res;
int re;
inline void build(int x,int l,int r){
	ma[x]={INF,0},mi[x]={0,INF};
	if(l==r) return ;
	build(x1,l,mid),build(x2,mid+1,r);
}
inline void init(){
	build(1,1,M);
	for(int i=1;i<=M;i++) tl[i]=0,tr[i]=INF;
}
void insert(int x,int l,int r,int sl,int sr,pii val){
	if(sl<=l&&sr>=r) return t[x].push_back(val),void();
	if(sl<=mid) insert(x1,l,mid,sl,sr,val);
	if(sr>mid) insert(x2,mid+1,r,sl,sr,val);
}
inline pii cmax(pii x,pii y){
	if(x.F==y.F) return {x.F,max(x.S,y.S)};
	return min(x,y);
}
inline pii cmin(pii x,pii y){
	if(x.F==y.F) return {x.F,min(x.S,y.S)};
	return max(x,y);
}
inline void pma(int x){
	res=cmax(ma[x1],ma[x2]);
	if(cmax(res,ma[x])!=ma[x]) dma[++tma]={x,ma[x]},ma[x]=res;
}
inline void pmi(int x){
	res=cmin(mi[x1],mi[x2]);
	if(cmin(res,mi[x])!=mi[x]) dmi[++tmi]={x,mi[x]},mi[x]=res;
}
void umax(int x,int l,int r,int pos,int val){
	if(l==r){
		if(cmax({pos,val},ma[x])!=ma[x]) dma[++tma]={x,ma[x]},ma[x]={pos,val};
		return ;
	}
	if(pos<=mid) umax(x1,l,mid,pos,val);
	else umax(x2,mid+1,r,pos,val);
	pma(x);
}
void umin(int x,int l,int r,int pos,int val){
	if(l==r){
		if(cmin({pos,val},mi[x])!=mi[x]) dmi[++tmi]={x,mi[x]},mi[x]={pos,val};
		return ;
	}
	if(pos<=mid) umin(x1,l,mid,pos,val);
	else umin(x2,mid+1,r,pos,val);
	pmi(x);
}
pii qmax(int x,int l,int r,int sl,int sr){
	if(sl<=l&&sr>=r) return ma[x];
	if(sl>r||sr<l) return {INF,0};
	return cmax(qmax(x1,l,mid,sl,sr),qmax(x2,mid+1,r,sl,sr));
}
pii qmin(int x,int l,int r,int sl,int sr){
	if(sl<=l&&sr>=r) return mi[x];
	if(sl>r||sr<l) return {0,INF};
	return cmin(qmin(x1,l,mid,sl,sr),qmin(x2,mid+1,r,sl,sr));
}
inline void addl(int x,int val){
	while(x<=M){
		if(tl[x]<val) dtl[++ttl]={x,tl[x]},tl[x]=val;
		x+=lowbit(x);
	}
}
inline void addr(int x,int val){
	x=M-x+1;
	while(x<=M){
		if(tr[x]>val) dtr[++ttr]={x,tr[x]},tr[x]=val;
		x+=lowbit(x);
	}
}
inline void askl(int x){
	re=0;
	while(x){
		re=max(re,tl[x]);
		x-=lowbit(x);
	}
}
inline void askr(int x){
	re=INF;x=M-x+1;
	while(x){
		re=min(re,tr[x]);
		x-=lowbit(x);
	}
}
inline void clean(int ta,int ti,int tll,int trr){
	while(ta<tma) ma[dma[tma].F]=dma[tma].S,tma--;
	while(ti<tmi) mi[dmi[tmi].F]=dmi[tmi].S,tmi--;
	while(tll<ttl) tl[dtl[ttl].F]=dtl[ttl].S,ttl--;
	while(trr<ttr) tr[dtr[ttr].F]=dtr[ttr].S,ttr--;
}
void solve(int x,int l,int r,pii ans,pii bas){
	int ta=tma,ti=tmi,tll=ttl,trr=ttr;
	for(auto v:t[x]){
		askl(v.F-1);
		ans=min(ans,{re?0:INF,v.S-re+1});
		askr(v.S+1);
		ans=min(ans,{re!=INF?0:INF,re-v.F+1});
		if(ans.F>0){
			res=qmax(1,1,M,v.F,v.S);
			if(res.F!=INF) ans=min(ans,{res.F-v.F+1,v.S-res.S+1});
			res=qmin(1,1,M,v.F,v.S);
			if(res.F!=0) ans=min(ans,{v.S-res.F+1,res.S-v.F+1});
		}
		addl(v.S,v.F);addr(v.F,v.S);
		umax(1,1,M,v.S,v.F);umin(1,1,M,v.F,v.S);
		if(v.S-v.F<bas.S-bas.F) bas=v;
	}
	
	if(l==r){
		if(ans.F==INF) cout<<bas.S-bas.F+1<<' '<<'\n';
		else cout<<ans.S<<'\n';
	}
	else solve(x1,l,mid,ans,bas),solve(x2,mid+1,r,ans,bas);
	clean(ta,ti,tll,trr);
}
int main(){
	freopen("stone.in","r",stdin);
	freopen("stone.out","w",stdout);
	int x,y;char ch;
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n;
	init();
	for(int i=1;i<=n;i++){
		cin>>ch>>x>>y;y--;
		if(ch=='A'){
			if(!mp[{x,y}].S) Q[++tmp]={x,y},len[tmp]={i,n},mp[{x,y}]={tmp,1};
			else mp[{x,y}].S++;
		}
		else{
			mp[{x,y}].S--;
			if(!mp[{x,y}].S) len[mp[{x,y}].F].S=i-1;
		}
	}
	for(int i=1;i<=tmp;i++) insert(1,1,n,len[i].F,len[i].S,Q[i]);
	solve(1,1,n,{INF,INF},{0,INF});
	return 0;
}
/*
5
A 1 5
A 2 7
A 4 6
A 6 8
R 4 6
*/

